1. Field of the Invention
The present invention relates to error correcting code (ECC) technology, and more particularly, to a RAID ECC with a reduced bandwidth.
2. Description of the Prior Art
Flash memory is a high performance, low power, non-volatile storage often used in portable devices. A disadvantage of Flash memory is that the cells slowly deteriorate over time meaning the accuracy of a held charge will also decrease. At some point, errors associated with the held charge cannot be corrected, and the cell becomes unusable.
Error Correcting Code (ECC) technology can extend the lifetime of a cell by locating and correcting errors associated with the held charges. One example of an ECC code is low-density parity check (LDPC) decoding, which is a powerful form of ECC technology. Even LDPC codes, however, have a certain probability of failing at a particular Raw Error Bit rate. In cases where a valid codeword cannot be found via LDPC coding, secondary ECC solutions can be provided which detect/correct errors that cannot be remedied by LDPC alone. One example is an encoding RAID check.
RAID is a virtual architecture which combines multiple disk drive components into a single logical unit. By striping codes across multiple disks, mirroring codes in a single disk to generate codes in another disk, and including parity symbols, valid codewords can be retrieved. RAID level 6 uses Reed-Solomon (RS) codes, each code consisting of 2-byte symbols. Data is written to multiple drives with double distributed parity, i.e. two parity blocks are distributed across all member disks. If an LDPC decoder cannot recover a valid codeword, the RAID parity can be used as the secondary ECC.
Data is RAID encoded by being segmented into many chunks and having RAID parity (Reed-Solomon codes) added. The RAID data is then input to an LDPC encoder, and stored in a Flash memory, from where it can be output to an LDPC decoder. After LDPC decoding, if a codeword fails (i.e. LDPC ECC is insufficient to recover correct data), RAID decoding is performed by inputting the non-valid codeword into a RAID engine, and inputting the RAID parity data to generate a syndrome. After a certain number of iterations, the syndrome should satisfy the matrix equations, i.e. it should equal zero. At this point, the original data can be recovered via the updated syndrome.
The drawbacks to the above method are that the RAID engine needs to be able to store an entire codeword, and that parity data of 64 bits (corresponding to four RS symbols) must be inputted to the RAID decoder in each iteration, which occupies a large bandwidth.